Jeg har rotet med JSON i noen tid, bare presset den ut som tekst, og det har ikke skadet noen (som jeg vet om), men jeg vil begynne å gjøre ting ordentlig. Jeg har sett så mange påståtte "standarder" for JSON-innholdstypen: søknad / json applikasjon / x-javascript tekst / javascript tekst / x-javascript tekst / x-json Men hvilken er riktig, eller best? Jeg oppdager at det er sikkerhets- og nettleserstøtteproblemer som varierer mellom dem. Jeg vet at det er et lignende spørsmål, hvilken MIME-type hvis JSON returneres av en REST API?, Men jeg vil ha et litt mer målrettet svar.
2020-12-07 21:17:42
1 2 Neste For JSON-tekst: søknad / json MIME-medietypen for JSON-tekst er application / json. Standard koding er UTF-8. (Kilde: RFC 4627). For JSONP (JavaScript som kan kjøres) med tilbakeringing: søknad / javascript Her er noen blogginnlegg som ble nevnt i de relevante kommentarene: Hvorfor du ikke bør bruke tekst / html for JSON Internet Explorer har noen ganger problemer med applikasjon / json En ganske komplett liste over Mimetypes og hva du skal bruke dem til Den offisielle mimetypelisten på IANA fra @ gnrfans svar nedenfor | IANA har registrert den offisielle MIME-typen for JSON som applikasjon / json. På spørsmål om hvorfor ikke tekst / json, synes Crockford å ha sagt at JSON egentlig ikke er JavaScript eller tekst, og IANA var mer sannsynlig å dele ut applikasjon / * enn tekst / *. Flere ressurser: Medietyper Forespørsel om kommentarer 4627 bluesmoon: JSON har en type | For JSON: Innholdstype: applikasjon / json For JSON-P: Innholdstype: applikasjon / javascript | Den riktige MIME-medietypen for JSON er selvfølgelig application / json, men det er nødvendig å innse hvilken type data som forventes i applikasjonen din. For eksempel bruker jeg Ext GWT, og serverresponsen må gå som tekst / html, men inneholder JSON-data. Kundesiden, Ext GWT skjema lytter uploadForm.getForm (). addListener (ny FormListenerAdapter () { @Overstyring offentlig ugyldighet onActionFailed (skjemaform, int httpStatus, strengrespons tekst) { MessageBox.alert ("Feil"); } @Overstyring offentlig ugyldighet onActionComplete (skjema, int httpStatus, strengrespons tekst) { MessageBox.alert ("Suksess"); } }); I tilfelle du bruker program / json-svarstype, foreslår nettleseren meg å lagre filen. Kildekodebit på serversiden ved bruk av Spring MVC returner nytt AbstractUrlBasedView () { @SuppressWarnings ("ukontrollert") @Overstyring beskyttet tomrom renderMergedOutputModel (kartmodell, HttpServletRequest forespørsel, HttpServletResponse respons) kaster Unntak { respons.setContentType ("tekst / html"); respons.getWriter (). skriv (json); } }; | JSON: Svaret er dynamisk genererte data, i samsvar med spørsmålsparametrene som sendes i URL-en. Eksempel: {"Name": "Foo", "Id": 1234, "Rank": 7} Innholdstype: applikasjon / json JSON-P: JSON med polstring. Svaret er JSON-data, med en funksjonsanrop viklet rundt det. Eksempel: functionCall ({"Name": "Foo", "Id": 1234, "Rank": 7}); Innholdstype: applikasjon / javascript | Hvis du bruker Ubuntu eller Debian og serverer .json-filer via Apache, vil du kanskje servere filene med riktig innholdstype. Jeg gjør dette først og fremst fordi jeg vil bruke Firefox-utvidelsen JSONView Apache-modulen mod_mime hjelper deg med å gjøre dette enkelt. Men med Ubuntu må du redigere filen /etc/mime.types og legge til linjen søknad / json json Start deretter Apache på nytt: sudo service apache2 start på nytt | Hvis du ringer ASP.NET Web Services fra klientsiden, må du bruke application / json for at det skal fungere. Jeg tror dette er det samme for jQuery og Ext-rammene. | Den riktige innholdstypen for JSON er application / json MED mindre du bruker JSONP, også kjent som JSON with Padding, som faktisk er JavaScript, og den riktige innholdstypen vil være application / javascript. | Det er ingen tvil om at applikasjon / json er den beste MIME-typen for et JSON-svar. Men jeg hadde litt erfaring der jeg måtte bruke applikasjon / x-javascript på grunn av noen komprimeringsproblemer. Mitt vertsmiljø er delt hosting med GoDaddy. De tillater meg ikke å endre serverkonfigurasjoner. Jeg hadde lagt til følgende kode i web.config-filen for å komprimere svar.Ved å bruke dette ble .aspx-sidene komprimert med g-zip, men JSON-svar var ikke. jeg la til i statiske og dynamiske typer. Men dette komprimerer ikke JSON-svar i det hele tatt. Etter det fjernet jeg denne nylig tilføyde typen og la til i både de statiske og dynamiske typeseksjonene, og endret responstypen i .ashx (asynkron behandler) til applikasjon / x-javascript Og nå fant jeg ut at JSON-svarene mine ble komprimert med g-zip. Så jeg personlig anbefaler å bruke applikasjon / x-javascript bare hvis du vil komprimere JSON-svarene dine på et delt hostingmiljø. Fordi i delt hosting tillater de deg ikke å endre IISkonfigurasjoner. | Bare når jeg bruker applikasjon / json som MIME-typen, har jeg følgende (per november 2011 med de nyeste versjonene av Chrome, Firefox med Firebug): Ingen flere advarsler fra Chrome når JSON lastes fra serveren. Firebug vil legge til en fane i svaret som viser deg JSON-dataene formatert. Hvis MIME-typen er forskjellig, vil den bare vises som 'Svarinnhold'. | Ikke alt fungerer for innholdstypeapplikasjon / json. Hvis du bruker Ext JS-skjema for å laste opp fil, må du være oppmerksom på at serverresponsen blir analysert av nettleseren for å opprette dokumentet for